﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

public partial class stock_registro_marca : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Menu m = Session["Menu"] as Menu;
        if (m == null) Response.Redirect("../login.aspx");
        if (!m.Stock)
        {
            Response.Redirect("../home/home.aspx");
        }


        desactivarCampos();
        SetFocus(btnNuevo);

        if (!Page.IsPostBack)
        {
            llenarDatosGrid();
        }
        Menu menuLateral = new Menu();
        lblMenuLateral.Text = menuLateral.MenuStockDetalles();
    }

    /*************Botones***********************/

    protected void btnNuevo_Click(object sender, EventArgs e)
    {
        activarCampos();
        limpiarCampos();
        btnGuardar.Visible = true;
        btnNuevo.Visible = false;
        btnCancelar.Enabled = true;
        btnBuscar.Enabled = false;
        SetFocus(txtMarca);
        lblMensaje.Text = "";


    }
    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        btnNuevo.Visible = true;
        btnCancelar.Enabled = false;
        btnGuardar.Visible = false;
        btnGuardarModif.Visible = false;
        btnBuscar.Enabled = true;
        limpiarCampos();
        desactivarCampos();
    }

    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        Marca m = new Marca();

        cargarDesdeInterfaz(m);

        try
        {
            m.Guardar();
            lblMensaje.Text = "La marca fue registrada correctamente";
            limpiarCampos();
            llenarDatosGrid();
        }
        catch (ConexionException ex)
        {
            lblMensaje.Text = ex.Message;
        }

        desactivarCampos();
        btnGuardar.Visible = false;
        btnCancelar.Enabled = false;
        btnNuevo.Visible = true;
        btnBuscar.Enabled = true;



    }

    protected void btnAceptarEliminar_Click(object sender, EventArgs e)
    {
        Marca m = Session["MarcaSeleccionada"] as Marca;
        try
        {
            m.Borrar();
            lblMensaje.Text = "La marca fue borrada correctamente";
            btnNuevo.Visible = true;
            btnCancelar.Enabled = false;          
            btnGuardar.Visible = false;
            btnGuardarModif.Visible = false;
            btnBuscar.Enabled = true;
            
            limpiarCampos();
            llenarDatosGrid();

        }
        catch (ConexionException ex)
        {
            lblMensaje.Text = ex.Message;
        }
    }

    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        lblMensaje.Text = "";
        SetFocus(txtMarcaBuscar);
        mpeBuscar.Show();

    }

    protected void btnGuardarModif_Click(Object sender, EventArgs e)
    {

        Marca m = Session["MarcaSeleccionada"] as Marca;
        cargarDesdeInterfaz(m);


        try
        {
            m.Actualizar();
            lblMensaje.Text = "La marca fue modificada correctamente";
            btnGuardarModif.Visible = false;
            btnNuevo.Visible = true;
            btnCancelar.Enabled = false;
            btnGuardar.Visible = false;
            btnBuscar.Enabled = true;
            llenarDatosGrid();
            limpiarCampos();
        }
        catch (ConexionException ex)
        {
            lblMensaje.Text = ex.Message;
        }


    }



    /*****************funciones auxiliares*****************/

    private void cargarDesdeInterfaz(Marca m)
    {
        m.Nombre = txtMarca.Text;
        m.Estado = "a";//activo por defecto        

    }


    private void desactivarCampos()
    {
        txtMarca.Enabled = false;
    }

    private void activarCampos()
    {
        txtMarca.Enabled = true;
    }

    private void limpiarCampos()
    {
        txtMarca.Text = "";
    }


    /**************************Controles de busqueda*****************/

    protected void btnBuscarPopub_Click(object sender, EventArgs e)
    {

        llenarDatosGrid();

    }

    protected void btnLimpiarCampos_Click(object sender, EventArgs e)
    {

        limpiarCamposBuscar();
        mpeBuscar.Show();
    }


    private void llenarDatosGrid()
    {
        Marca m = new Marca();
        Session["Marca"] = m; //guardo la marca en la session para utilizar sus metodos despues

        DataSet ds = m.Buscar(txtMarcaBuscar.Text);
        gvMarcas.DataSource = ds.Tables[0];
        gvMarcas.DataBind();
        Session["Marcas"] = ds.Tables[0]; //Almaceno el DataSet en una variable de Session para usarla el Sorting del GridView

    }

    protected void gvMarcas_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "editar" || e.CommandName == "borrar")
        {
            gvMarcas.SelectedIndex = Convert.ToInt32(e.CommandArgument);
            int idMarca = Convert.ToInt32(gvMarcas.SelectedDataKey.Value);

            //Recupera la tabla Marcas de la session
            DataTable dt = Session["Marcas"] as DataTable;

            //Busca en la tabla el row con el id de la marca seleccionada
            DataRow[] rows = dt.Select("id_marca = " + idMarca + " ");

            //Creamos un marca con los datos cargados del grid
            Marca m = new Marca();
            m.Id = idMarca;

            m.Nombre = rows[0]["marca"].ToString();

            //Guardamos la marca seleccionada en la session para poder modificarlo o eliminarlo despues
            Session["MarcaSeleccionada"] = m;


        }

        if (e.CommandName == "editar")
        {
            cargarSeleccionado(); //cargamos a la interfaz los datos del seleccionado
            activarCampos();
            btnGuardarModif.Visible = true;
            btnCancelar.Visible = true;
            SetFocus(txtMarca);
            lblMensaje.Text = "";

        }

        if (e.CommandName == "borrar")
        {
            mpeEliminar.Show();
        }
    }
    private void limpiarCamposBuscar()
    {
        txtMarcaBuscar.Text = "";
    }


    protected void gvMarcas_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gvMarcas.PageIndex = e.NewPageIndex;
        gvMarcas.DataSource = Session["Marcas"];
        gvMarcas.DataBind();
       
    }

   
    //Ordena el GridView de Busqueda de marca
    protected void gvMarcas_Sorting(object sender, GridViewSortEventArgs e)
    {

        //Recupera la tabla de la session
        DataTable dt = Session["Marcas"] as DataTable;

        if (dt != null)
        {

            //Ordena los datos
            dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
            gvMarcas.DataSource = Session["Marcas"];
            gvMarcas.DataBind();
        }       
    }

    private string GetSortDirection(string column)
    {
        // Por defecto, seteamos la direccion como ascendente
        string sortDirection = "ASC";

        // Recuparea la ultima columna que fue ordenada
        string sortExpression = ViewState["SortExpression"] as string;

        if (sortExpression != null)
        {

            if (sortExpression == column)
            {
                string lastDirection = ViewState["SortDirection"] as string;
                if ((lastDirection != null) && (lastDirection == "ASC"))
                {
                    sortDirection = "DESC";
                }
            }
        }
        // Guarda los nuevos valores en el ViewState
        ViewState["SortDirection"] = sortDirection;
        ViewState["SortExpression"] = column;

        return sortDirection;
    }
    /**
    * Carga la marca que se había selecionado en la busqueda a la interfaz
    */
    private void cargarSeleccionado()
    {
        Marca m = Session["MarcaSeleccionada"] as Marca;

        txtMarca.Text = m.Nombre;


        btnGuardarModif.Visible = false;
        btnCancelar.Visible = true;
        btnCancelar.Enabled = true;
        btnGuardar.Visible = false;
        btnNuevo.Visible = false;

    }
}
